package qq2564874169.tuaotuao.fx.mq;


import qq2564874169.tuaotuao.fx.EventDispatcher;
import qq2564874169.tuaotuao.fx.FxAutoCloseable;

public interface MqSubscriber extends FxAutoCloseable {

    void declare(String queue);

    /**
     * 消息回调
     */
    EventDispatcher<MqMessage> evReceived();

    EventDispatcher<SubscriberError> evError();

    /**
     * 订阅指定队列的消息
     * @param queue 目标队列名称
     * @param name 订阅名称，相同名称下只有一个线程会收到到消息
     * @param state 状态对象
     * @return consumeId，可以用于取消某个特定订阅
     */
    String consume(String queue, String name, Object state);

    /**
     * 取消订阅指定队列的消息
     */
    void cancel(String queue, String name);

    /**
     * 取消订阅指定队列的消息
     */
    void cancel(String consumeId);

    @Override
    void close();

    default String consume(String queue, String name) {
        return consume(queue, name, null);
    }
}
